package jee.boot.module.iexp.excel.template;

import jee.boot.entity.task.IExportField;
import jee.boot.entity.task.IExportModel;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DemoBigDataTemplate {


    public static void main(String[] args) {
        List<Map<String,Object>> list=initData();
        IExportModel model=initModel();
        Map<String,Object>data=new HashMap<>();
        data.put("list",list);
        try {
            System.out.println("开始....");
            long a=System.currentTimeMillis();
            new ExportTemplateExcelExecutor()
                    .initByModelAndData(model,data)
//                    .initByTemplatePathAndData("C:\\data\\autoTemplate1.xlsx ",data)
//                    .initByTemplatePathAndData("C:\\data\\bigData.xlsx ",data)
                    .buildExcel()
                    .writeFile("C:\\data\\bigDataExport.xlsx");
            long b=System.currentTimeMillis();
            System.out.println("导出用时:"+((b-a)/1000)+"秒");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static IExportModel initModel() {
        return  new IExportModel() {
            @Override
            public String getTitle() {
                return "this is title";
            }

            @Override
            public List<? extends IExportField> getExportFieldList() {
                return new ArrayList<IExportField>(){{
                    for(int i=0;i<10;i++){
                        final int a=i;
                        add( new IExportField(){

                            /**
                             * 标题
                             *
                             * @return
                             */
                            @Override
                            public String getTitle() {
                                return "title-a"+a;
                            }

                            /**
                             * 属性名称
                             *
                             * @return
                             */
                            @Override
                            public String getFieldName() {
                                return "a"+a;
                            }

                            /**
                             * 属性类型
                             *
                             * @return
                             */
                            @Override
                            public Class<?> getFieldType() {
                                return null;
                            }

                            /**
                             * 字典类型(如果是字典类型的数据,则需要提供,其他不需要提供)
                             *
                             * @return
                             */
                            @Override
                            public String getDictType() {
                                return null;
                            }

                            /**
                             * 字典的取值属性,如果不设置,系统自动获取label的值
                             *
                             * @return
                             */
                            @Override
                            public String getDictField() {
                                return null;
                            }

                            /**
                             * 格式化数据,数据格式
                             *
                             * @return
                             */
                            @Override
                            public String getFormat() {
                                return null;
                            }
                        });
                    }
                }};
            }
        };
    }

    private static List<Map<String, Object>> initData() {
        int size=20;
        int column=10;
        List<Map<String, Object>> list=new ArrayList<>();
        for(int i=0;i<size;i++){
            Map<String,Object>map=new HashMap<>();
            for(int j=0;j<column;j++){
                map.put("a"+j,"a:"+i+j);
            }
            list.add(map);
        }
        return list;
    }

}
